/**
 * 
 */
package com.hs.example.dao.imp;

/**
 * @author shl
 *
 */
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;

import com.hs.common.PublicUtil;
import com.hs.core.dao.BaseDao;
import com.hs.example.dao.BooksDao;
import com.hs.example.model.Books;


/** *//**
 * @author cwf
 *
 */
public class BooksMapDao extends BaseDao implements BooksDao {

    public BooksMapDao(){}

    /** *//**
     * 函数说明：添加信息
     * 参数说明：对象 
     * 返回值：
     */
    public void addBook(Books book) {
        this.getHibernateTemplate().save(book);
    }

    /** *//**
     * 函数说明：删除信息
     * 参数说明： 对象
     * 返回值：
     */
    public void deleteBook(Books book) {
        this.getHibernateTemplate().delete(book);
    }

    /** *//**
     * 函数说明：获得所有的信息
     * 参数说明： 
     * 返回值：信息的集合
     */
    public List getAll() {
        String sql="FROM Books ORDER BY bookName";
        return this.getHibernateTemplate().find(sql);
    }
    
    /** *//**
     * 函数说明：获得总行数
     * 参数说明： 
     * 返回值：总行数
     */
    public int getRows() {
        String sql="FROM Books ORDER BY bookName";
        List list=this.getHibernateTemplate().find(sql);
        return list.size();
    }
    
    /** *//**
     * 函数说明：获得所有的信息
     * 参数说明： 
     * 返回值：信息的集合
     */
    public List getBooks(int pageSize, int startRow) throws HibernateException {
        final int pageSize1=pageSize;
        final int startRow1=startRow;
        return this.getHibernateTemplate().executeFind(new HibernateCallback(){

            public List doInHibernate(Session session) throws HibernateException, SQLException {
                // TODO 自动生成方法存根
                Query query=session.createQuery("FROM Books ORDER BY bookName");
                query.setFirstResult(startRow1);
                query.setMaxResults(pageSize1);
                return query.list();
            }
        });
    }

    /** *//**
     * 函数说明：获得一条的信息
     * 参数说明： ID
     * 返回值：对象
     */
    public Books getBook(String bookId) {
        return (Books)this.getHibernateTemplate().get(Books.class,bookId);
    }

    /** *//**
     * 函数说明：获得最大ID
     * 参数说明： 
     * 返回值：最大ID
     */
    public String getMaxID() {
        String date=PublicUtil.getStrNowDate();
        String sql="SELECT MAX(bookId)+1 FROM Books  ";
        String noStr = null;
        List ll = (List) this.getHibernateTemplate().find(sql);
        Iterator itr = ll.iterator();
        if (itr.hasNext()) {
            Object noint = itr.next();
            if(noint == null){
                noStr = "1";                
            }else{
                noStr = noint.toString();
            }
        }
        
        if(noStr.length()==1){
            noStr="000"+noStr;
        }else if(noStr.length()==2){
            noStr="00"+noStr;
        }else if(noStr.length()==3){
            noStr="0"+noStr;
        }else{
            noStr=noStr;
        }
        return noStr;
    }

    /** *//**
     * 函数说明：修改信息
     * 参数说明： 对象
     * 返回值：
     */
    public void updateBook(Books pd) {
        this.getHibernateTemplate().update(pd);
    }

    /** *//**
     * 函数说明：查询信息
     * 参数说明： 集合
     * 返回值：
     */
    public List queryBooks(String fieldname,String value) {
        System.out.println("value: "+value);
        String sql="FROM Books where "+fieldname+" like '%"+value+"%'"+"ORDER BY bookName";
        return this.getHibernateTemplate().find(sql);
    }
    
    /** *//**
     * 函数说明：获得总行数
     * 参数说明： 
     * 返回值：总行数
     */
    public int getRows(String fieldname,String value) {
        String sql="";
        if(fieldname==null||fieldname.equals("")||fieldname==null||fieldname.equals(""))
            sql="FROM Books ORDER BY bookName";
        else    
            sql="FROM Books where "+fieldname+" like '%"+value+"%'"+"ORDER BY bookName";
        List list=this.getHibernateTemplate().find(sql);
        return list.size();
    }
    
    /** *//**
     * 函数说明：查询信息
     * 参数说明： 集合
     * 返回值：
     */
    public List getBooks(String fieldname,String value,int pageSize, int startRow) {
        final int pageSize1=pageSize;
        final int startRow1=startRow;
        final String queryName=fieldname;
        final String queryValue=value;
        String sql="";
        
        if(queryName==null||queryName.equals("")||queryValue==null||queryValue.equals(""))
            sql="FROM Books ORDER BY bookName";
        else    
            sql="FROM Books where "+fieldname+" like '%"+value+"%'"+"ORDER BY bookName";
        
        final String sql1=sql;
        return this.getHibernateTemplate().executeFind(new HibernateCallback(){

            public List doInHibernate(Session session) throws HibernateException, SQLException {
                // TODO 自动生成方法存根
                Query query=session.createQuery(sql1);
                query.setFirstResult(startRow1);
                query.setMaxResults(pageSize1);
                return query.list();
            }
        });
    }

}
